TerraformでWorkflowsのワークフローを作ってみた
データアナリティクス事業本部の根本です。最近はWorkflowsやDataformを実装することが多いのですがせっかくなのでWorkflowsのリソース作成をgcloudコマンドではなくTerraformで作りたいなと思い試してみました。
この記事の対象者
- TerraformでWorkflowsワークフローを作成してみたいひと
前提条件
- Workflows、Cloud Shellが使用できること
検証の全体像
- TerraformでWorkflowsが作成できるかどうか
早速やっていきます。
やってみる
まずはTerraformを実装していきます。一応Cloud ShellにTerraformが入っているかコマンドで確認します。
terraform version
コマンドを実行して以下のようなバージョン情報の出力があれば問題ありません。
Terraform v1.5.7 on linux_amd64 Your version of Terraform is out of date! The latest version is 1.8.2. You can update by downloading from https://www.terraform.io/downloads.html
(今回は検証なのでバージョンは特に気にしません)
それではTerraformを動かす準備をしていきます。
まずはTerraform用のフォルダを作成して、作成したフォルダへ移動します。
mkdir terraform_workflows_test && cd terraform_workflows_test
さて、今回作成するファイルは2つです。
- main.tf(TerraformでWorkflwosワークフローを作成するもの)
- workflow.yaml(Workflowsワークフローの処理).
まずはTeffaformのファイルmain.tf
を作成します。
provider "google" { project = "プロジェクトID" region = "asia-northeast1" } resource "google_workflows_workflow" "test_workflow" { name = "test-workflow" description = "Terraformで作成したワークフロー" source_contents = file("${path.module}/workflow.yaml") }
source_contents
にて作成対象のWorkflowsワークフローのyamlファイルを指定しています。
それではworkflow.yaml
も実装します。
main: steps: - call_sys_log: call: sys.log args: text: "terraform作成のworkflowsワークフロー" severity: "INFO"
作成するWorkflowsのワークフローはログ出力するだけのシンプルなものです。
2つのファイルが準備できたらTerraformを実行していきます。
まずは以下のコマンドを発行します。
terraform init
terraform init
コマンドが成功したらterraform apply
コマンドを発行してWorkflowsワークフローを作成します。
terraform apply
terraform apply
を実行してリソース作成を実行します。
Do you want to perform these actions?
と確認されますので、yes
と入力してEnterキーを押下します。
google_workflows_workflow.test_workflow: Modifying... [id=projects/プロジェクトID/locations/asia-northeast1/workflows/test-workflow] google_workflows_workflow.test_workflow: Modifications complete after 1s [id=projects/プロジェクトID/locations/asia-northeast1/workflows/test-workflow] Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
上記のようなメッセージが表示されていれば作成成功です。
Workflowsのコンソールから作成されているか確認してみます。
無事作成できていました。
workflow.yaml
のファイル内容通りのソースコードとなっていました。問題なくTerraformでリソース作成ができました。
サービスアカウントも設定してみる
せっかくなのでサービスアカウントも設定してみました。
リファレンスを確認したところ
projects/{project}/serviceAccounts/{account} or {account}.
上記形式でサービスアカウントを指定できるようでしたので、それに則りservice_account
の指定を追加しました。
provider "google" { project = "プロジェクトID" region = "asia-northeast1" } resource "google_workflows_workflow" "test_workflow" { name = "test-workflow" description = "Terraformで作成したワークフロー" service_account = "projects/プロジェクトID/serviceAccounts/サービスアカウント名(メール)" #↑上記を追加 source_contents = file("${path.module}/workflow.yaml") }
こちらもterraform apply
を実行してリソース作成をしてみます。
サービスアカウントが設定されたワークフローが作成されていました!
おわりに
簡潔な記述でリソース作成ができて、とても嬉しく思いました。開発時はgcloudコマンドでデプロイしていても、本運用の時にはTerraform化してあると運用保守しやすくて良いかなと個人的には思います。そしてTerraformでリソース作成するのは本当に面白いです。
この記事が誰かのお役に立てば嬉しいです。それではまた。